Summary for India

Row

confirmed

29,451

active

21,375 (72.6%)

death

939 (3.2%)

Row

Daily cumulative cases by type (India only)

Row ———————————————————————–

Daily cumulative cases by type Log Scale (India only)

Comparison

** Daily Growth Rate of Total Cases from March (India Only)**


Daily new confirmed cases from March

Country Wise

Cases distribution by Country

Map

World map of cases (use + and - icons to zoom in/out)

Summary for US

Row

confirmed

988,197

active

820,514 (83%)

death

56,259 (5.7%)

Row

Daily cumulative cases by type (United States only)

Row ———————————————————————–

Daily cumulative cases by type Log Scale (United States only)

---
title: "Coronavirus in India Dashboard"
author: "by Mithun Ghosh"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    # social: ["facebook", "twitter", "linkedin"]
    source_code: embed
    vertical_layout: fill
---

```{r setup, include=FALSE}
#------------------ Packages ------------------
library(flexdashboard)
# install.packages("devtools")
# devtools::install_github("RamiKrispin/coronavirus", force = TRUE)
#library(coronavirus)
#data(coronavirus)
#update_datasets()
# View(coronavirus)
# max(coronavirus$date)
coronavirus <- read.csv(file="https://raw.githubusercontent.com/RamiKrispin/coronavirus-csv/master/coronavirus_dataset.csv",header=TRUE,sep=",")

`%>%` <- magrittr::`%>%`
#------------------ Parameters ------------------
# Set colors
# https://www.w3.org/TR/css-color-3/#svg-color
confirmed_color <- "purple"
active_color <- "#1f77b4"
recovered_color <- "forestgreen"
death_color <- "red"
#------------------ Data ------------------
df <- coronavirus %>%
  # dplyr::filter(date == max(date)) %>%
  dplyr::filter(Country.Region == "India") %>%
  dplyr::group_by(Country.Region, type) %>%
  dplyr::summarise(total = sum(cases)) %>%
  tidyr::pivot_wider(
    names_from = type,
    values_from = total
  ) %>%
  # dplyr::mutate(unrecovered = confirmed - ifelse(is.na(recovered), 0, recovered) - ifelse(is.na(death), 0, death)) %>%
  dplyr::mutate(unrecovered = confirmed - ifelse(is.na(death), 0, death) -ifelse(is.na(recovered), 0, recovered) ) %>%
  dplyr::arrange(-confirmed) %>%
  dplyr::ungroup() %>%
  dplyr::mutate(country = dplyr::if_else(Country.Region == "United Arab Emirates", "UAE", as.character(Country.Region))) %>%
  dplyr::mutate(country = dplyr::if_else(country == "Mainland China", "China", country)) %>%
  dplyr::mutate(country = dplyr::if_else(country == "North Macedonia", "N.Macedonia", country)) %>%
  dplyr::mutate(country = trimws(country)) %>%
  dplyr::mutate(country = factor(country, levels = country))

df_daily <- coronavirus %>%
  dplyr::filter(Country.Region == "India") %>%
  dplyr::group_by(date, type) %>%
  dplyr::summarise(total = sum(cases, na.rm = TRUE)) %>%
  tidyr::pivot_wider(
    names_from = type,
    values_from = total
  ) %>%
  dplyr::arrange(date) %>%
  dplyr::ungroup() %>%
  dplyr::mutate(active = confirmed - death -recovered) %>%
  dplyr::mutate(
    confirmed_cum = cumsum(confirmed),
    death_cum = cumsum(death),
    recovered_cum = cumsum(recovered),
    active_cum = cumsum(active)
  )


df1 <- coronavirus %>% dplyr::filter(date == max(as.character(date)))
```

Summary for India
=======================================================================

Row {data-width=400}
-----------------------------------------------------------------------

### confirmed {.value-box}

```{r}

valueBox(
  value = paste(format(sum(df$confirmed), big.mark = ","), "", sep = " "),
  caption = "Total confirmed cases",
  icon = "fas fa-user-md",
  color = confirmed_color
)
```


### active {.value-box}
```{r}
 valueBox( 
   value = paste(format(sum(df$unrecovered, na.rm = TRUE), big.mark = ","), " (",
     round(100 * sum(df$unrecovered, na.rm = TRUE) / sum(df$confirmed), 1),
     "%)",
     sep = "" 
   ),
   caption = "Active cases (% of total cases)", icon = "fas fa-ambulance",
   color = active_color
 ) 
``` 

### death {.value-box}

```{r}

valueBox(
  value = paste(format(sum(df$death, na.rm = TRUE), big.mark = ","), " (",
    round(100 * sum(df$death, na.rm = TRUE) / sum(df$confirmed), 1),
    "%)",
    sep = ""
  ),
  caption = "Death cases (death rate)",
  icon = "fas fa-heart-broken",
  color = death_color
)
```


Row
-----------------------------------------------------------------------

### **Daily cumulative cases by type** (India only)

```{r}
df_daily <- df_daily %>% dplyr::filter(as.character(date) > "2020-01-31") 
plotly::plot_ly(data = df_daily) %>%
  plotly::add_trace(
    x = ~date,
    # y = ~active_cum,
    y = ~confirmed_cum,
    type = "scatter",
    mode = "lines+markers",
    # name = "Active",
    name = "Confirmed",
    line = list(color = confirmed_color),
    marker = list(color = confirmed_color)
  ) %>%
  plotly::add_trace(
    x = ~date,
    y = ~ confirmed_cum - recovered_cum - death_cum,
    type = "scatter",
    mode = "lines+markers",
    name = "Active Cases",
    line = list(color = active_color),
    marker = list(color = active_color)
  ) %>%
  plotly::add_trace(
    x = ~date,
    y = ~ recovered_cum,
    type = "scatter",
    mode = "lines+markers",
    name = "Recovered",
    line = list(color = recovered_color),
    marker = list(color = recovered_color)
  ) %>%
  plotly::add_trace(
    x = ~date,
    y = ~death_cum,
    type = "scatter",
    mode = "lines+markers",
    name = "Death",
    line = list(color = death_color),
    marker = list(color = death_color)
  ) %>%
  plotly::add_annotations(
    x = as.Date("2020-01-31"),
    y = 1,
    text = paste("First case"),
    xref = "x",
    yref = "y",
    arrowhead = 5,
    arrowhead = 3,
    arrowsize = 1,
    showarrow = TRUE,
    ax = -10,
    ay = -90
  ) %>%
  plotly::add_annotations(
    x = as.Date("2020-03-12"),
    y = 3,
    text = paste("First death"),
    xref = "x",
    yref = "y",
    arrowhead = 5,
    arrowhead = 3,
    arrowsize = 1,
    showarrow = TRUE,
    ax = -90,
    ay = -90
  ) %>%
  plotly::add_annotations(
    x = as.Date("2020-03-22"),
    y = 14,
    text = paste(
      "New containment",
      "
", "measures" ), xref = "x", yref = "y", arrowhead = 5, arrowhead = 3, arrowsize = 1, showarrow = TRUE, ax = -10, ay = -90 ) %>% plotly::layout( title = "", yaxis = list(title = "Cumulative number of cases"), xaxis = list(title = "Date"), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` Row ----------------------------------------------------------------------- ### **Daily cumulative cases by type Log Scale** (India only) ```{r} plotly::plot_ly(data = df_daily) %>% plotly::add_trace( x = ~date, # y = ~active_cum, y = ~log(confirmed_cum), type = "scatter", mode = "lines+markers", # name = "Active", name = "Confirmed", line = list(color = confirmed_color), marker = list(color = confirmed_color) ) %>% plotly::add_trace( x = ~date, y = ~ log(confirmed_cum - recovered_cum - death_cum), type = "scatter", mode = "lines+markers", name = "Active Cases", line = list(color = active_color), marker = list(color = active_color) ) %>% plotly::add_trace( x = ~date, y = ~ log(recovered_cum), type = "scatter", mode = "lines+markers", name = "Recovered", line = list(color = recovered_color), marker = list(color = recovered_color) ) %>% plotly::add_trace( x = ~date, y = ~log(death_cum), type = "scatter", mode = "lines+markers", name = "Death", line = list(color = death_color), marker = list(color = death_color) ) %>% plotly::layout( title = "", yaxis = list(title = "Cumulative number of cases"), xaxis = list(title = "Date"), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` Comparison ========================================================================================= ### ** Daily Growth Rate of Total Cases from March (India Only)** ```{r} df_april <- df_daily %>% dplyr::filter(as.character(date) > "2020-03-06") %>% dplyr::mutate(total_case_growth = confirmed_cum / dplyr::lag(confirmed_cum,k=1)) %>% dplyr::mutate(active_case_growth = confirmed_cum / dplyr::lag(active_cum,k=1)) %>% dplyr::mutate(death_case_growth = confirmed_cum / dplyr::lag(death_cum,k=1)) plotly::plot_ly(data = df_april) %>% plotly::add_trace( x = ~date, y = ~ total_case_growth - 1, type = "scatter", mode = "lines+markers", name = " Daily Growth Rate of Total Cases", line = list(color = active_color), marker = list(color = active_color) ) %>% plotly::add_trace( x = ~date, y = ~ active_case_growth - 1, type = "scatter", mode = "lines+markers", name = " Daily Growth Rate of Active Cases", line = list(color = recovered_color), marker = list(color = recovered_color) ) %>% # plotly::add_trace( # x = ~date, # y = ~ death_case_growth - 1, # type = "scatter", # mode = "lines+markers", # name = " Daily Growth Rate of Death Cases", # line = list(color = active_color), # marker = list(color = death_color) # ) %>% plotly::layout( title = "", legend = list(x = 0.1, y = 0.9), yaxis = list(title = "Daily Growth Rate"), xaxis = list(title = "Date") ) ``` ------------------------------------------------------------------------------------- ### **Daily new confirmed cases from March** ```{r} daily_confirmed <- coronavirus %>% dplyr::filter(type == "confirmed") %>% dplyr::filter(as.Date(date) >= "2020-03-06") %>% dplyr::mutate(country = Country.Region) %>% dplyr::group_by(date, country) %>% dplyr::summarise(total = sum(cases)) %>% dplyr::ungroup() %>% tidyr::pivot_wider(names_from = country, values_from = total) #---------------------------------------- # Plotting the data daily_confirmed %>% plotly::plot_ly() %>% plotly::add_trace( x = ~date, y = ~India, type = "scatter", mode = "lines+markers", name = "India" ) %>% plotly::add_trace( x = ~date, y = ~France, type = "scatter", mode = "lines+markers", name = "France" ) %>% plotly::add_trace( x = ~date, y = ~Spain, type = "scatter", mode = "lines+markers", name = "Spain" ) %>% plotly::add_trace( x = ~date, y = ~Italy, type = "scatter", mode = "lines+markers", name = "Italy" ) %>% plotly::add_trace( x = ~date, y = ~US, type = "scatter", mode = "lines+markers", name = "US" ) %>% plotly::add_trace( x = ~date, y = ~Germany, type = "scatter", mode = "lines+markers", name = "Germany" ) %>% plotly::layout( title = "", legend = list(x = 0.1, y = 0.9), yaxis = list(title = "Number of new confirmed cases"), xaxis = list(title = "Date"), hovermode = "compare", margin = list( b = 10, t = 10, pad = 2 ) ) ``` Country Wise ======================================================================================== ### **Cases distribution by Country** ```{r daily_summary} df_EU <- coronavirus %>% # dplyr::filter(date == max(date)) %>% dplyr::filter(Country.Region %in% c("US","Spain","Italy","France","Germany","China","Iran","United Kingdom","Turkey","Belgium","Canada","Brazil","Netherlands","Russia", "Switzerland","Portugal","Austria","Ireland","Israel","India")) %>% dplyr::group_by(Country.Region, type) %>% dplyr::summarise(total = sum(cases)) %>% tidyr::pivot_wider( names_from = type, values_from = total ) %>% # dplyr::mutate(unrecovered = confirmed - ifelse(is.na(recovered), 0, recovered) - ifelse(is.na(death), 0, death)) %>% dplyr::mutate(unrecovered = confirmed - ifelse(is.na(death), 0, death)) %>% dplyr::arrange(confirmed) %>% dplyr::ungroup() %>% dplyr::mutate(country = dplyr::if_else(Country.Region == "United Arab Emirates", "UAE", as.character(Country.Region))) %>% dplyr::mutate(country = dplyr::if_else(country == "Mainland China", "China", country)) %>% dplyr::mutate(country = dplyr::if_else(country == "North Macedonia", "N.Macedonia", country)) %>% dplyr::mutate(country = trimws(country)) %>% dplyr::mutate(country = factor(country, levels = country)) plotly::plot_ly( data = df_EU, x = ~country, # y = ~unrecovered, y = ~ confirmed - recovered -death, # text = ~ confirmed, # textposition = 'auto', type = "bar", name = "Active", marker = list(color = active_color) ) %>% plotly::add_trace( y = ~death, # text = ~ death, # textposition = 'auto', name = "Death", marker = list(color = death_color) ) %>% plotly::add_trace( y = ~recovered, name = "Recovered", marker = list(color = recovered_color) )%>% plotly::layout( barmode = "stack", yaxis = list(title = "Total cases"), xaxis = list(title = ""), hovermode = "compare", legend = list(x = 0.1, y = 0.9), margin = list( # l = 60, # r = 40, b = 10, t = 10, pad = 2 ) ) ``` Map ======================================================================= ### **World map of cases** (*use + and - icons to zoom in/out*) ```{r} # map tab added by Art Steinmetz library(leaflet) #library(leafpop) library(purrr) cv_data_for_plot <- coronavirus %>% # dplyr::filter(Country.Region == "India") %>% dplyr::filter(cases > 0) %>% dplyr::group_by(Country.Region, Province.State, Lat, Long, type) %>% dplyr::summarise(cases = sum(cases)) %>% dplyr::mutate(log_cases = 2 * log(cases)) %>% dplyr::ungroup() cv_data_for_plot.split <- cv_data_for_plot %>% split(cv_data_for_plot$type) pal <- colorFactor(c("orange", "red", "green"), domain = c("confirmed", "death", "recovered")) map_object <- leaflet() %>% addProviderTiles(providers$Stamen.Toner) names(cv_data_for_plot.split) %>% purrr::walk(function(df) { map_object <<- map_object %>% addCircleMarkers( data = cv_data_for_plot.split[[df]], lng = ~Long, lat = ~Lat, # label=~as.character(cases), color = ~ pal(type), stroke = FALSE, fillOpacity = 0.8, radius = ~log_cases, popup = leafpop::popupTable(cv_data_for_plot.split[[df]], feature.id = FALSE, row.numbers = FALSE, zcol = c("type", "cases", "Country.Region", "Province.State") ), group = df, # clusterOptions = markerClusterOptions(removeOutsideVisibleBounds = F), labelOptions = labelOptions( noHide = F, direction = "auto" ) ) }) map_object %>% addLayersControl( overlayGroups = names(cv_data_for_plot.split), options = layersControlOptions(collapsed = FALSE) ) ``` Summary for US ======================================================================= ```{r} df_US <- coronavirus %>% # dplyr::filter(date == max(date)) %>% dplyr::filter(Country.Region == "US") %>% dplyr::group_by(Country.Region, type) %>% dplyr::summarise(total = sum(cases)) %>% tidyr::pivot_wider( names_from = type, values_from = total ) %>% # dplyr::mutate(unrecovered = confirmed - ifelse(is.na(recovered), 0, recovered) - ifelse(is.na(death), 0, death)) %>% dplyr::mutate(unrecovered = confirmed - ifelse(is.na(death), 0, death) - ifelse(is.na(recovered), 0, recovered)) %>% dplyr::arrange(-confirmed) %>% dplyr::ungroup() %>% dplyr::mutate(country = dplyr::if_else(Country.Region == "United Arab Emirates", "UAE", as.character(Country.Region))) %>% dplyr::mutate(country = dplyr::if_else(country == "Mainland China", "China", country)) %>% dplyr::mutate(country = dplyr::if_else(country == "North Macedonia", "N.Macedonia", country)) %>% dplyr::mutate(country = trimws(country)) %>% dplyr::mutate(country = factor(country, levels = country)) df_daily_US <- coronavirus %>% dplyr::filter(Country.Region == "US") %>% dplyr::group_by(date, type) %>% dplyr::summarise(total = sum(cases, na.rm = TRUE)) %>% tidyr::pivot_wider( names_from = type, values_from = total ) %>% dplyr::arrange(date) %>% dplyr::ungroup() %>% dplyr::mutate(active = confirmed - death -recovered) %>% dplyr::mutate( confirmed_cum = cumsum(confirmed), death_cum = cumsum(death), recovered_cum = cumsum(recovered), active_cum = cumsum(active) ) ``` Row {data-width=400} ----------------------------------------------------------------------- ### confirmed {.value-box} ```{r} valueBox( value = paste(format(sum(df_US$confirmed), big.mark = ","), "", sep = " "), caption = "Total confirmed cases", icon = "fas fa-user-md", color = confirmed_color ) ``` ### active {.value-box} ```{r} valueBox( value = paste(format(sum(df_US$unrecovered, na.rm = TRUE), big.mark = ","), " (", round(100 * sum(df_US$unrecovered, na.rm = TRUE) / sum(df_US$confirmed), 1), "%)", sep = "" ), caption = "Active cases (% of total cases)", icon = "fas fa-ambulance", color = active_color ) ``` ### death {.value-box} ```{r} valueBox( value = paste(format(sum(df_US$death, na.rm = TRUE), big.mark = ","), " (", round(100 * sum(df_US$death, na.rm = TRUE) / sum(df_US$confirmed), 1), "%)", sep = "" ), caption = "Death cases (death rate)", icon = "fas fa-heart-broken", color = death_color ) ``` Row ----------------------------------------------------------------------- ### **Daily cumulative cases by type** (United States only) ```{r} plotly::plot_ly(data = df_daily_US) %>% plotly::add_trace( x = ~date, # y = ~active_cum, y = ~confirmed_cum, type = "scatter", mode = "lines+markers", # name = "Active", name = "Confirmed", line = list(color = confirmed_color), marker = list(color = confirmed_color) ) %>% plotly::add_trace( x = ~date, y = ~ confirmed_cum - recovered_cum - death_cum, type = "scatter", mode = "lines+markers", name = "Active Cases", line = list(color = active_color), marker = list(color = active_color) ) %>% plotly::add_trace( x = ~date, y = ~ recovered_cum, type = "scatter", mode = "lines+markers", name = "Recovered", line = list(color = recovered_color), marker = list(color = recovered_color) ) %>% plotly::add_trace( x = ~date, y = ~death_cum, type = "scatter", mode = "lines+markers", name = "Death", line = list(color = death_color), marker = list(color = death_color) ) %>% plotly::add_annotations( x = as.Date("2020-01-22"), y = 1, text = paste("First case"), xref = "x", yref = "y", arrowhead = 5, arrowhead = 3, arrowsize = 1, showarrow = TRUE, ax = -10, ay = -90 ) %>% plotly::add_annotations( x = as.Date("2020-02-29"), y = 3, text = paste("First death"), xref = "x", yref = "y", arrowhead = 5, arrowhead = 3, arrowsize = 1, showarrow = TRUE, ax = -90, ay = -90 ) %>% plotly::layout( title = "", yaxis = list(title = "Cumulative number of cases"), xaxis = list(title = "Date"), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ``` Row ----------------------------------------------------------------------- ### **Daily cumulative cases by type Log Scale** (United States only) ```{r} plotly::plot_ly(data = df_daily_US) %>% plotly::add_trace( x = ~date, # y = ~active_cum, y = ~log(confirmed_cum), type = "scatter", mode = "lines+markers", # name = "Active", name = "Confirmed", line = list(color = confirmed_color), marker = list(color = confirmed_color) ) %>% plotly::add_trace( x = ~date, y = ~ log(confirmed_cum - recovered_cum - death_cum), type = "scatter", mode = "lines+markers", name = "Active Cases", line = list(color = active_color), marker = list(color = active_color) ) %>% plotly::add_trace( x = ~date, y = ~ log(recovered_cum), type = "scatter", mode = "lines+markers", name = "Recovered", line = list(color = recovered_color), marker = list(color = recovered_color) ) %>% plotly::add_trace( x = ~date, y = ~log(death_cum), type = "scatter", mode = "lines+markers", name = "Death", line = list(color = death_color), marker = list(color = death_color) ) %>% plotly::layout( title = "", yaxis = list(title = "Cumulative number of cases"), xaxis = list(title = "Date"), legend = list(x = 0.1, y = 0.9), hovermode = "compare" ) ```